////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Utilities/System.h"
#include "Generator/IGenerator.h"

using namespace std;
using namespace dxcodegen::Generator;

////////////////////////////////////////////////////////////////////////////////

IGenerator::IGenerator(const string& generatedItemDescription) :
m_generatedItemDescription(generatedItemDescription)
{
  CreateHeaderComment();
}

////////////////////////////////////////////////////////////////////////////////

IGenerator::~IGenerator()
{
}

////////////////////////////////////////////////////////////////////////////////

string& IGenerator::GetHeaderCommment()
{
  return m_headerComment;
}

////////////////////////////////////////////////////////////////////////////////

ofstream* IGenerator::CreateFilename(const string& filename)
{
  ofstream* sortida = new ofstream(filename.c_str(), ios::out);
  if (sortida)
  {
    WriteHeaderComment(sortida);
  }
  return sortida;
}

////////////////////////////////////////////////////////////////////////////////

void IGenerator::WriteHeaderComment(ofstream* of)
{
  if (of && of->is_open())
  {
    *of << m_headerComment;
  }
}

////////////////////////////////////////////////////////////////////////////////

void IGenerator::CloseFilename(ofstream* of)
{
  if (of && of->is_open())
  {
    of->close();
    delete of;
  }
}

////////////////////////////////////////////////////////////////////////////////

void IGenerator::CreateHeaderComment()
{
  m_headerComment.clear();
  
  m_headerComment += "////////////////////////////////////////////////////////////////////////////////" "\n";
  m_headerComment += "// " + m_generatedItemDescription + "\n";
  m_headerComment += "//" "\n";
  m_headerComment += "// Autogenerated on " + Utilities::System::GetCurrentDateTime() + " by DXCodeGen" "\n";
  m_headerComment += "//" "\n";
  m_headerComment += "// Copyright (c) 2007 by David Abella" "\n";
  m_headerComment += "////////////////////////////////////////////////////////////////////////////////" "\n";
  m_headerComment += "\n";
}

////////////////////////////////////////////////////////////////////////////////
